iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Software Development

溫柔學姐的Kotlin補課/教學系列 第 10

週末雨會(四):自定義資料類別 Defined Data Class

  • 分享至 

  • xImage
  •  

擔心晚上天氣可能會變糟,兩人選擇外帶飲料。

「剛剛陣列裡放的只有價錢,怎麼分辨飲料的名字?」詩憶啜飲著牛奶可可,延續剛剛的飲料價位篩選問題。

「⋯⋯其實是剛剛的飲料單空白處不多,就省略了用自定義類別的描述。定義飲料的細節。」唯心把飲料放下,轉而走到桌前,打開IDE建立了兩個檔案。

圖1

data class 飲料(val name: String, val price: Int)

圖2

fun main() {
    val 飲料們 = arrayOf(飲料("鮮奶紅茶",50), 飲料("多多奶茶", 60), 飲料("火龍果奶茶", 70), 飲料("奶茶", 30), 飲料("鮮奶綠茶", 50))

    for (飲料 in 飲料們) {
        // if條件式
        if (飲料.price <= 60) {
            println(飲料.name)
        }
    }
}

她飛快的輸入程式碼後,旋即起身,結果和拿著飲料走過來的詩憶遇個正著。

唯心順手收走詩憶手中的飲料,放到自己的飲料旁邊,微笑的解釋說:「飲料不要靠近筆電。」

「啊,忘記了。」詩憶感到尷尬,耳朵發紅。

「嗯,我知道,慢慢留意就好。說到該記的事,妳不覺得程式碼統一用英文的話,輸入法就不用頻繁切換,更何況中文還要選字。用英文的話,習慣了之後既節省時間也不用折磨手指。妳總有一天要練好英文的,何不一開始就練?」

唯心給詩憶看看IDE對使用了非ASCII字的中文字發出的警告。

圖3

「如果要用英文,記住類別名字要用英文字母大寫開頭,變數名字要用英文字母小寫開頭。」

圖3

詩憶看她邊說邊重複握緊拳頭打開拳頭,增添手部的血液循環的動作,不由得點頭。

唯心沒有繼續說話,詩憶就開始研究兩個檔案程式碼。「是故意不放在一個檔案的嗎?」

「是的,我習慣將類別從其他程式碼中獨立出來放在class檔案,如果其他程式碼段落也要用到這個類別,可以節省尋找時間。因為一天只有二十四小時啊。」唯心一臉可惜的說。「不過找到延長的方法的話,好像也有點危險呢,對被支配者來說吶。」她輕輕地勾起嘴角,露出略帶玩味的笑容。

詩憶直覺繼續這個話題不太安全,所以決定還是回頭提起有關程式的問題就好。「學姐,class前面都要加data的嗎?」

唯心回答:「啊,不用,一般的類別只需要classdata class是資料類別,很多功能針對資料屬性特化,比如同樣印出,兩者結果就不一樣。」

println(飲料("鮮奶綠茶", 50))

「如果是data class,會印出類別和屬性飲料(name=鮮奶綠茶, price=50));反之,如果是class,預設只會印出類別和物件存放的記憶體位置飲料@2c7b84de,當然要改預設也是可以的,只是一般都是有需要再改。」唯心繼續補充:「比對兩個類別物件的方式也不一樣,data class注意的是屬性值有沒有相同,class預設注意的是存放的位置是不是相同。所以class可以沒有屬性,但是data class一定要有屬性,所以data class一開始就會在括號裡的第一建構式用valvar設定屬性。」

「一般class不在第一建構式設定屬性的話,那些變數會變成什麼?」詩憶問。

唯心笑了笑:「這個嗎?通常會在後面的大括號裡對傳進來的變數做處理或計算再另外儲存結果,畢竟不是屬性的變數,只能在後面的大括號生存,想和之前一樣呼叫飲料.price,程式只會和你說查無此人。」

class 飲料(name: String, price: Int) {
    val newPrice = price + 10
}

上一篇
週末雨會(三):用迴圈跑陣列再加上條件式 Array Loops And Conditions
下一篇
結識班代:四則運算子函式多載 Arithmetic Operators Function Overloading
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言